package com.sz.admin.datainfo.controller;

import com.sz.admin.datainfo.pojo.dto.DataStatisticsQueryDTO;
import com.sz.admin.datainfo.pojo.vo.DriverStatisticsVO;
import com.sz.admin.datainfo.pojo.vo.VehicleStatisticsVO;
import com.sz.admin.datainfo.pojo.vo.WorkDataStatisticsVO;
import com.sz.admin.datainfo.pojo.vo.WorkDataGroupedByDateVO;
import com.sz.admin.datainfo.service.DataStatisticsService;
import com.sz.core.common.entity.ApiResult;
import com.sz.core.common.entity.PageResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * <p>
 * 数据统计 Controller
 * </p>
 *
 * @author sz-admin
 * @since 2025-09-23
 */
@Tag(name = "数据统计")
@RestController
@RequestMapping("/data-statistics")
@RequiredArgsConstructor
public class DataStatisticsController {

    private final DataStatisticsService dataStatisticsService;

    @Operation(summary = "分页查询司机数据", 
               description = "查询当前登录用户所属部门及下级部门的司机用户数据。默认查询当前月份数据，可通过month参数指定月份(格式: yyyy-MM)或通过startTime/endTime指定时间范围")
    @GetMapping("/drivers")
    public ApiResult<PageResult<DriverStatisticsVO>> pageDrivers(DataStatisticsQueryDTO dto) {
        return ApiResult.success(dataStatisticsService.pageDrivers(dto));
    }

    @Operation(summary = "分页查询钩机车辆数据", 
               description = "查询当前登录用户所属部门及下级部门的钩机车辆数据。默认查询当前月份数据，可通过month参数指定月份(格式: yyyy-MM)或通过startTime/endTime指定时间范围")
    @GetMapping("/excavators")
    public ApiResult<PageResult<VehicleStatisticsVO>> pageExcavators(DataStatisticsQueryDTO dto) {
        return ApiResult.success(dataStatisticsService.pageExcavators(dto));
    }

    @Operation(summary = "分页查询运输车车辆数据", 
               description = "查询当前登录用户所属部门及下级部门的运输车车辆数据。默认查询当前月份数据，可通过month参数指定月份(格式: yyyy-MM)或通过startTime/endTime指定时间范围")
    @GetMapping("/transport-vehicles")
    public ApiResult<PageResult<VehicleStatisticsVO>> pageTransportVehicles(DataStatisticsQueryDTO dto) {
        return ApiResult.success(dataStatisticsService.pageTransportVehicles(dto));
    }

    @Operation(summary = "获取统计数据", 
               description = "获取当前登录用户所属部门及下级部门的司机、钩机、运输车、作业数据数量统计。默认统计当前月份数据，可通过month参数指定月份(格式: yyyy-MM)或通过startTime/endTime指定时间范围")
    @GetMapping("/statistics-count")
    public ApiResult<Map<String, Long>> getStatisticsCount(@RequestParam(required = false) String month,
                                                          @RequestParam(required = false) java.time.LocalDateTime startTime,
                                                          @RequestParam(required = false) java.time.LocalDateTime endTime) {
        return ApiResult.success(dataStatisticsService.getStatisticsCount(month, startTime, endTime));
    }

    @Operation(summary = "分页查询作业数据", 
               description = "查询当前登录用户所属部门及下级部门的作业数据。默认查询当前月份数据，可通过month参数指定月份(格式: yyyy-MM)或通过startTime/endTime指定时间范围。" +
                            "关联sys_monitor_file_record的file_tag作为设备编号去关联dtu_info的dtu_number，再根据vehicle_id关联vehicle_info的department_id进行部门过滤。")
    @GetMapping("/work-data")
    public ApiResult<PageResult<WorkDataStatisticsVO>> pageWorkData(DataStatisticsQueryDTO dto) {
        return ApiResult.success(dataStatisticsService.pageWorkData(dto));
    }

    @Operation(summary = "根据司机ID分页查询作业数据", 
               description = "根据司机ID查询当前登录用户所属部门及下级部门的作业数据，按创建时间倒序排列。默认查询当前月份数据，可通过month参数指定月份(格式: yyyy-MM)或通过startTime/endTime指定时间范围。")
    @GetMapping("/work-data/driver/{driverId}")
    public ApiResult<PageResult<WorkDataStatisticsVO>> pageWorkDataByDriverId(DataStatisticsQueryDTO dto, @PathVariable Long driverId) {
        return ApiResult.success(dataStatisticsService.pageWorkDataByDriverId(dto, driverId));
    }

    @Operation(summary = "根据司机ID分页查询作业数据（按日期分组）", 
               description = "根据司机ID查询当前登录用户所属部门及下级部门的作业数据，按日期分组返回两层结构。默认查询当前月份数据，可通过month参数指定月份(格式: yyyy-MM)或通过startTime/endTime指定时间范围。")
    @GetMapping("/work-data/driver/{driverId}/grouped-by-date")
    public ApiResult<PageResult<WorkDataGroupedByDateVO>> pageWorkDataByDriverIdGroupedByDate(DataStatisticsQueryDTO dto, @PathVariable Long driverId) {
        return ApiResult.success(dataStatisticsService.pageWorkDataByDriverIdGroupedByDate(dto, driverId));
    }

    @Operation(summary = "根据车辆ID分页查询作业数据（按日期分组）", 
               description = "根据车辆ID查询当前登录用户所属部门及下级部门的作业数据，按日期分组返回两层结构。默认查询当前月份数据，可通过month参数指定月份(格式: yyyy-MM)或通过startTime/endTime指定时间范围。")
    @GetMapping("/work-data/vehicle/{vehicleId}/grouped-by-date")
    public ApiResult<PageResult<WorkDataGroupedByDateVO>> pageWorkDataByVehicleIdGroupedByDate(DataStatisticsQueryDTO dto, @PathVariable Long vehicleId) {
        return ApiResult.success(dataStatisticsService.pageWorkDataByVehicleIdGroupedByDate(dto, vehicleId));
    }
}